闲扯
我觉得我可以直接入土了。。。
$T1$ 题面看错,数据范围看漏,直接爆零。。
题面
$T1$
Solution
我们设 $f_{u,k}$ 表示从 $fa_u$ 到 $1$ 这条链上,合法的 $1\sim k$ 的序列个数;设 $g_{u,k}$ 表示 $u$ 的子树中(不包含 $u$ )合法的 $k\sim L$ 的序列个数。
那么显然包含 $u$ 的合法序列个数为 $f_{u,w_u-1}\cdot g_{u,w_u+1}$ 。
考虑修改一个点的时候,怎么计算答案。
显然,我们先删去原来通过该点的答案,再加上新的答案即可。
但是我们有多次修改怎么办?
注意到有一个很好的性质: $f_u<u$ ,所以修改一个点的时候,它到 $1$ 的链上的所有点都已经改过,直接用改了之后的统计,而子树中的点都还没改,直接用原来的统计即可。
我们将 $m$ 拆分为 $\lceil \frac{m}{n}\rceil$ 轮修改,每次做一次树形 $dp$ 即可。
总复杂度为 $O(n+m)$ 。
Code
1 |
|